<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>async与await的使用</title>
</head>
<body>
<!--
    1. async 修饰的函数
        函数的返回值为 Promise 对象
        Promise 实例的结果由 async 函数执行的返回值决定
    2. await 表达式：
        await 右侧的表达式一般为 Promise 实例对象，但也可以是其它的值
        (1). 如果表达式是 Promise 实例对象，await 后的返回值是 promise 成功的值
        (2). 如果表达式是其它值，直接将此值作为 await 的返回值
    3. 注意：
        await 必须写在 async 函数中，但 async 函数中可以没有 await
        如果 await 的 Promise 实例对象失败了，就会抛出异常，需要通过 try...catch 来捕获异常
 -->
<script type="text/javascript">
    const p = new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve('ok~')
        }, 1000)
    })
    const p2 = new Promise((resolve, reject) => {
            setTimeout(() => {
                resolve('ok2~')
            }, 1000)
        })

        // p.then()
        /*
        p.then(
            value => {
                console.log('成功了', value)
            },
            reason => {
                console.log('失败了', reason)
            }
        )

         */

        // async await
        // 注意：最前面有分号 ; （叹号 ! 也可以）
    ;const a = (async () => {
        const result = await p
        console.log(result)
        const res = await p2
        console.log(res)
    })()
    a.then(
        value => {
            console.log('ok', value)
        },
        reason => {
            console.log('err', reason)
        }
    )
</script>
</body>
</html>
